Patch Management Release 3.11 API
January 27, 2026
Before understanding the API release highlights, learn more about the API server URL to be used in your API requests by referring to the Know Your Qualys API Server URL section. For this API Release Notes, <qualys_base_url> is mentioned in the sample API requests.
New API: Generate MTG Deployment Job Progress Report 
| New or Updated API | New |
| API Endpoint | /pm/v1/report/mitigationjobprogress |
| Method | POST |
| DTD or XSD changes | Not Applicable |
We have introduced a new Get MTG Deployment Job Progress API that generates customized Mitigation job progress report for the specified job ID. All columns are selected by default, but you can modify and provide only the required columns. This API supports only Windows and Linux platforms.
If you provide an empty request body and null parameters, the API will generate a report including all the columns.
Input ParametersInput Parameters
|
Parameter |
Mandatory/ |
Data Type |
Description |
|---|---|---|---|
| deploymentJobId | Mandatory | String | Specify the job ID. |
Sample - Generate MTG Deployment Job Progress ReportSample - Generate MTG Deployment Job Progress Report
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/report/mitigationjobprogress/d8560bb3-a863-4f1d-9682-00fd708061e3' \
-H 'accept: application/json' \
-H 'Authorization: Bearer<JWT_token>
-H 'Content-Type: application/json' \
-d '
API Body
{
"name": "Mitigation Job Progress Report",
"description": "Mitigation Job Progress Report Description",
"query": "",
"columnsToDisplay": {
"mitigationJobProgress": [
"assetId",
"assetName",
"jobStatus",
"operatingSystem",
"qid",
"actionStatus",
"returnCode",
"returnMessage",
"mitigationStatus",
"cveIds",
"mitigationTitle",
"mitigationType",
"impactFactor",
"mitigationReturnCode",
"mitigationReason",
"assetDeactivated"
]
}
}'
API Response
{
"reportId": "18446aab-3dfc-46a0-8578-67a55d96f180"
}
New API: Generate ISL Deployment Job Progress Report 
| New or Updated API | New |
| API Endpoint | pm/v1/report/isolationjobprogress |
| Method | POST |
| DTD or XSD changes | Not Applicable |
We have introduced a new Get ISL Deployment Job Progress API that generates customized Isolation job progress report for the specified job ID. All columns are selected by default, but you can modify and provide only the required columns. This API supports only Windows and Linux platforms.
If you provide an empty request body and null parameters, the API will generate a report including all the columns.
Input ParametersInput Parameters
|
Parameter |
Mandatory/ |
Data Type |
Description |
|---|---|---|---|
| deploymentJobId | Mandatory | String | Specify the job ID. |
Sample - Generate ISL Deployment Job Progress ReportSample - Generate ISL Deployment Job Progress Report
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/report/isolationjobprogress/f8560bb3-a863-4f1d-9682-00fd708061e3' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
-d '
API Body
curl -X 'POST' \
'<qualys_base_url>/pm/v1/report/isolationjobprogress/f8560bb3-a863-4f1d-9682-00fd708061e3' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJhbGC4a_rcRzokzA' \
-H 'Content-Type: application/json' \
-d '{
"name": "Isolation Job Progress Report",
"description": "Isolation Job Progress Report Description",
"query": "",
"columnsToDisplay": {
"isolationJobProgress": [
"assetId",
"assetName",
"jobStatus",
"assetIp",
"operatingSystem",
"isolationStatus",
"isolationMessage",
"assetDeactivated"
]
}
}'
API Response
{
"reportId": "3c41aa33-f4bd-4982-8880-87024741e3f9"
}
Updated API: Create Deployment Job 
| New or Updated API | Updated |
| API Endpoint | /pm/v1/deploymentjob |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this release, we have updated the Create Deployment Job API, which will display an error message in the API response, if the pre or post actions includes restricted commands.
Sample - Create Deployment Job with restricted commandsSample - Create Deployment Job with restricted commands
API Request
curl -X 'POST' \
'<qualys_base_url>/pm/v1/deploymentjob' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
-d '
API Body
{
"approvedPatches": ["0c4619c6-dbc6-391b-a4fe-f2cad1835600"],
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"linkedJobId": "",
"dynamicQQLType": 1,
"assetCount": 0,
"assetIds": ["1857c651-a6d4-4cb2-a334-0fb94cbaa5b7"],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "test_blacklist_script",
"description": "",
"createdBy": null,
"patchCount": 0,
"postDeployment": {
"suppressreboots": false,
"rebootHonorOnUserLogin": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": 3,
"interval": 1,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": 3,
"interval": 1,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0
},
"allowExecutionWithPendingReboot": false,
"customPatchURLId": null,
"timeout": -1,
"timeoutUnit": "HOURS",
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"timezone": null,
"timezoneType": null,
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"platform": "Windows",
"exclusionAssetIds": [],
"preDeployActions": [
{
"action": "Run Script",
"params": {
"actionItem": "Run command",
"carScriptDetails": {
"carScriptCategory": "",
"carScriptDescription": "",
"carScriptId": "",
"carScriptLanguage": "",
"carScriptPlatform": "",
"carScriptQid": "",
"carScriptSource": "",
"carScriptStatus": "",
"carScriptSubType": "",
"carScriptTitle": "",
"carScriptType": "",
"scriptType": "Patch"
},
"fileChecksum": "",
"remediationScope": false,
"defaultScriptType": ""
},
"scriptType": "ps",
"script": "UmVzdGFydC1TZXJ2aWNlIC1uYW1lICJRdWFseXNBZ2VudCI=",
"selected": true
}
],
"postDeployActions": [
{
"action": "Run Script",
"params": {
"actionItem": "test2",
"carScriptDetails": {
"carScriptCategory": "",
"carScriptDescription": "",
"carScriptId": "",
"carScriptLanguage": "",
"carScriptPlatform": "",
"carScriptQid": "",
"carScriptSource": "",
"carScriptStatus": "",
"carScriptSubType": "",
"carScriptTitle": "",
"carScriptType": "",
"scriptType": "Patch"
},
"fileChecksum": "",
"remediationScope": false,
"defaultScriptType": ""
},
"scriptType": "ps",
"script": "UmVzdGFydC1TZXJ2aWNlIC1uYW1lICJRdWFseXNBZ2VudCI=",
"selected": true
}
],
"jobCategory": null,
"jobSource": 2,
"notification": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"chainedJobRule": [],
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
}
}'
API Response
{
"_error": {
"code": 400,
"message": "Job creation failed because the script includes restricted command in action Run command."
}
}
Updated API: Update Deployment Job 
| New or Updated API | Updated |
| API Endpoint | /pm/v1/deploymentjob/update/{deploymentJobId} |
| Method | POST |
| DTD or XSD changes | Not Applicable |
With this release, we have updated the Update Deployment Job API, which will display an error message in the API response, if the pre or post actions includes restricted commands.
Sample - Update Deployment Job with restricted commandsSample - Update Deployment Job with restricted commands
API Request
curl -X 'PATCH' \
'<qualys_base_url>/pm/v1/deploymentjob/update/e0553f55-a0e8-4dc3-ae7b-2f5842d69a47' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>
-H 'Content-Type: application/json' \
-d '
API Body
{
"approvedPatches": [
"b88687cb-21a0-31bb-87b9-5277ced2b146"
],
"dynamicPatchesQQL": "",
"isDynamicPatchesQQL": false,
"dynamicQQLType": 1,
"additionalDynamicPatchesQQL": "",
"additionalDynamicQQLType": "",
"linkedJobId": "",
"chainedJobRule": [],
"assetCount": 1,
"assetIds": [
"1857c651-a6d4-4cb2-a334-0fb94cbaa5b7"
],
"isAssetImported": false,
"assetFilePath": null,
"assetTagIds": [],
"assetDetectionsQQL": "",
"deleted": false,
"duringDeployment": {
"userMessage": "",
"description": ""
},
"name": "feaea",
"description": "",
"patchCount": 1,
"createdBy": {
"user": {
"id": "5ec46a7e-421c-5450-82a5-bcd66aebcf38",
"name": "quays_pn71",
"fullName": "Prerna Guhe"
},
"date": "1764047524073"
},
"postDeployment": {
"suppressreboots": false,
"rebootHonorOnUserLogin": false,
"onComplete": {
"userMessage": "",
"description": "",
"alwaysShowCompletedPrompt": false
},
"rebootCountdown": {
"interval": 15,
"intervalUnit": "MINUTES",
"userMessage": "Reboot countdown started",
"description": "The system reboot is initiated. It will reboot automatically after the timer countdown."
},
"rebootOption": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
}
},
"preDeployment": {
"deferment": {
"count": null,
"interval": null,
"intervalUnit": "HOURS"
},
"userMessage": "",
"description": ""
},
"recurring": false,
"dayOfMonth": null,
"recurringLastDayOfMonth": false,
"patchTuesdayPlusXDays": null,
"monthlyRecurringType": null,
"recurringDayOfMonth": null,
"recurringWeekDayOfMonth": null,
"recurringWeekDays": "",
"scheduleType": "On-demand",
"schemaVersion": "1.0",
"startDateTime": null,
"status": "Disabled",
"opportunisticdownloads": false,
"minimizeWindow": false,
"enableReattemptFailedPatches": false,
"reattemptFailedPatches": {
"noOfReattempts": 0,
"exponentialBackoffInterval": 0
},
"allowExecutionWithPendingReboot": false,
"timeout": -1,
"timeoutUnit": "HOURS",
"downloadRandomizeTime": 0,
"downloadRandomizeTimeUnit": "MINUTES",
"timezone": null,
"timezoneType": null,
"type": "Install",
"filterType": "Any",
"exclusionFilterType": "Any",
"exclusionTagIds": [],
"matchAllTagIds": [],
"coAuthorUserIds": [],
"exclusionAssetIds": [],
"preDeployActions": [
{
"action": "Run Script",
"params": {
"actionItem": "Blocked commands",
"carScriptDetails": {
"carScriptCategory": "",
"carScriptDescription": "",
"carScriptId": "",
"carScriptLanguage": "",
"carScriptPlatform": "",
"carScriptQid": "",
"carScriptSource": "",
"carScriptStatus": "",
"carScriptSubType": "",
"carScriptTitle": "",
"carScriptType": "",
"scriptType": "Patch"
},
"fileChecksum": "",
"remediationScope": false,
"defaultScriptType": ""
},
"scriptType": "ps",
"script": "U3RvcC1TZXJ2aWNlIC1uYW1lICJRdWFseXNBZ2VudCIK",
"actionId": "599b4ce0-7627-4e47-bf99-829e3f63ec8e"
}
],
"postDeployActions": [],
"jobCategory": 3,
"jobSource": 2,
"platform": "Windows",
"notification": null,
"customPatchURLId": null,
"remediationQids": [],
"isVulnContext": false,
"subCategory": "Patch",
"hostIsolationConfig": null,
"quarantineAssetRequestNotification": null,
"isDefaultJob": false,
"defaultJobConfiguration": {
"onAssetActivation": false,
"onAssetInactiveForXDays": null
}
}
API Response
{
"_error": {
"code": 400,
"message": "Job update failed because the script includes restricted command in action Run command."
}
}
Updated API: Get List of Mitigations 
| New or Updated API | Updated |
| API Endpoint | /mtg/v1/vulnerabilities/mitigations |
| Method | POST |
| DTD or XSD changes | Not Applicable |
We have updated the Get List of Mitigations API to include a new parameter, mitigationSource, in the API response. This parameter specifies the source of the mitigation script, indicating whether it is a Qualys script or a user-defined custom script.
Sample - Get List of MitigationsSample - Get List of Mitigations
API Request
curl -X 'POST' \
'<qualys_base_url>/mtg/v1/vulnerabilities/mitigations' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <JWT_Token>' \
-H 'Content-Type: application/json' \
-d
API Body
{
"pageNumber": 0,
"pageSize": 10,
"qids": [92142],
"platform": [
"Windows"
],
"implication": [
"FIX"
]
}
API Response
[
{
"qid": 92142,
"vulnMitigation": {
"Windows": {
"scriptBased": {
"CVE-2024-30080": [
{
"mitigationId": "c9d5319f-5f93-490a-989c-e504fe368cd6",
"mitigationType": "demo",
"mitigationCategory": null,
"description": "",
"impactFactor": 100,
"isDefault": true,
"implication": "FIX",
"mitigationSource": "qualys"
}
],
"CVE-2024-35250": [
{
"mitigationId": "c9d5319f-5f93-490a-989c-e504fe368cd6",
"mitigationType": "demo",
"mitigationCategory": null,
"description": "",
"impactFactor": 100,
"isDefault": true,
"implication": "FIX",
"mitigationSource": "custom"
}
]
}
}
}
}
]
UI Release Updates
To know in detail about the UI features, enhancements and issues addressed, see Patch Management Release 3.11.